/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxline.service;

import br.com.foxline.model.Bairro;
import br.com.foxline.model.City;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author laverson
 */
@Stateless
public class BairroService extends GenericService<Bairro> {

    public BairroService() {
        super(Bairro.class);
    }

    public List<Bairro> autoComplete(String query) {
        return findByName(query);
    }

    public List<Bairro> findByName(String query) {
        List<Bairro> results = getEntityManager().createQuery("select e from " + Bairro.class.getSimpleName() + " e where lower(e.nome) like '%" + query.toLowerCase().trim() + "%'").getResultList();
        return results;
    }

    public List<Bairro> findByName(String query, City cidade) {
        String sql = "select b from " + Bairro.class.getSimpleName() + " b ";

        if (cidade != null && cidade.getName() != null && !cidade.getName().equals("")) {
            sql += " JOIN b.cidade c ";
        }

        sql += "where lower(b.nome) like lower(:nome)";

        if (cidade != null && cidade.getName() != null && !cidade.getName().equals("")) {
            sql += " and lower(c.name) like lower(:name)";
        }

        System.err.println(sql);

        Query querya = getEntityManager().createQuery(sql);

        if (cidade != null && cidade.getName() != null && !cidade.getName().equals("")) {
            querya.setParameter("nome", "%" + query.trim().replace(" ", "%") + "%");
        }

        if (cidade != null && cidade.getName() != null && !cidade.getName().equals("")) {
            querya.setParameter("name", "%" + cidade.getName() + "%");
        }

        return querya.getResultList();
    }
}
